#pragma once

#include <iostream>
#include <string>
#include <cstdarg>
#include <cstdio>
#include <ctime>

// 日志是有日志级别的
#define DEBUG   0
#define NORMAL  1
#define WARNING 2
#define ERROR   3
#define FATAL   4

const char* gLevelMap[] = {
    "DEBUG",
    "NORMAL",
    "WARNING",
    "ERROR",
    "FATAL"
};

//完整的日志功能，至少：有效的日志等级，时间，日志内容，支持用户自定义
void logMessage(int level, const char* format, ...)
{
#ifndef DEBUG_SHOW
    if (level == DEBUG) return;
#endif
    char stdBuffer[1024];// 标准部分
    time_t timestamp = time(nullptr);
    // struct tm* localtime = localtime(&timestap);
    snprintf(stdBuffer, sizeof stdBuffer, "[%s][%ld]", gLevelMap[level], timestamp);
    
    char logBuffer[1024];// 自定义部分
    va_list args;
    va_start(args, format);
    //vprintf(format, args);
    vsnprintf(logBuffer, sizeof logBuffer, format, args);
    va_end(args);

    printf("%s%s\n", stdBuffer, logBuffer);
}